package com.atguigu.mvc.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author 陆小根
 * date: 2022/05/02
 * Description:
 */

@Controller
public class FileUploadAndDownloadController {

  @RequestMapping("/testDownload")
  public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
    // 获取ServletContext对象
    ServletContext servletContext = session.getServletContext();
    // 获取服务器中文件的真实路径
    String realPath = servletContext.getRealPath("/static/img/1.png");
    System.out.println("realPath = " + realPath);
    // 创建输入流
    InputStream is = new FileInputStream(realPath);
    // 创建字节数组
    byte[] bytes = new byte[is.available()]; // 获取文件的大小
    // 将流读入到字节数组中
    is.read(bytes);
    // 创建HttpHeaders对象设置响应头信息
    MultiValueMap<String, String> headers = new HttpHeaders();
    // 设置下载方式以及下载文件的名字
    headers.add("Content-Disposition", "attachment;filename=1.png");
    // 设置响应状态码
    HttpStatus statusCode = HttpStatus.OK;
    // 创建ResponseEntity对象
    ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
    // 关闭流
    is.close();
    return responseEntity;
  }


  @RequestMapping("/testUpload")
  public String testUpload(MultipartFile photo, HttpSession session) throws IOException {
    // 军事理论.png  photo
    // 获取上传的文件的文件名
    String fileName = photo.getOriginalFilename(); // 获取文件名
    // 获取上后攒的文件的后缀名
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    // 将UUID作为文件名 ---> 解决重名问题
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    // 将uuid和后缀拼接后的记过作为最终的文件名
    fileName = uuid + suffixName;
    // 通过ServletContext获取服务器的photo目录的路径
    ServletContext servletContext = session.getServletContext();
    String photoPath = servletContext.getRealPath("photo");
    File file = new File(photoPath);
    // 判断photoPath所对应路径是否存在
    if (!file.exists()) {
      // 若不存在
      file.mkdir();
    }
    // 分隔符 separator
    String destPath = photoPath + File.separator + fileName;
    photo.transferTo(new File(destPath)); // 这个方法中封装的就是先读在写
    return "success";
  }

}
